import axios from 'axios';

// 配置主要的axios实例
const myAxios = axios.create({
  baseURL: 'http://159.75.133.177:8090',
  // baseURL: 'http://localhost:8090',
  // withCredentials: true
});

// 让post能够成功发送数据
myAxios.defaults.headers.post['Content-Type'] = 'application/json';
myAxios.defaults.headers.get['Content-Type'] = 'application/json';

// axios请求拦截
myAxios.interceptors.request.use(config => {
  // console.log(`${localStorage.getItem('token')}`)
  // 为请求头对象，添加Token验证的Authorization字段
  config.headers.Authorization = `${localStorage.getItem('token')}`;
  // console.log(config)
  return config;
});

// axios响应拦截
myAxios.interceptors.response.use(
  response => {
    // console.log(response)
    // 对响应数据做处理
    return response;
  },
  error => {
    console.log(error)
    // 对响应错误做处理
    if (error.response) {
      // 服务器返回了错误状态码
      switch (error.response.status) {
        case 401: // 未授权
          console.log('未授权，请登录');
          // 清除token并跳转到登录页
          localStorage.removeItem('token');
          window.location.href = '/';
          break;
        case 403: // 禁止访问
          console.error('没有权限访问该资源');
          break;
        case 404: // 资源不存在
          console.error('请求的资源不存在');
          break;
        case 500: // 服务器错误
          console.error('服务器内部错误');
          break;
        default:
          console.error(`未知错误: ${error.response.status}`);
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error('网络错误，无法连接到服务器');
    } else {
      // 请求配置有误
      console.error('请求配置错误:', error.message);
    }
    return Promise.reject(error);
  }
);

// 配置额外的axios实例，用于请求其他的后端(其它平台的API)
const otherAxios = axios.create({
  withCredentials: true
});
otherAxios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
otherAxios.defaults.headers.get['Content-Type'] = 'application/x-www-form-urlencoded';

// otherAxios响应拦截
otherAxios.interceptors.response.use(
  response => {
    // 对响应数据做处理
    return response;
  },
  error => {
    // 对响应错误做处理
    console.error('外部API请求错误:', error);
    return Promise.reject(error);
  }
);

export { myAxios, otherAxios };